#ifndef ICHARACTER_HH
#define ICHARACTER_HH

#include <string>
#include <vector>
#include "Item.hh"

/*This header file defines an abstract base class ICharacter, which serves as an interface for character entities in a game or simulation. Key features include:

Virtual Destructor: Ensures proper cleanup of derived class objects via polymorphism.
Core Functionalities:
Status Checks: isAlive() checks if the character is alive.
Combat: takeDamage(unsigned damage) and attack(ICharacter& target) handle damage and attacks (pure virtual, requiring implementation in derived classes).
Attributes Accessors:
Getters for name, description, maximum health, current health, attack power, and defense (all pure virtual).
toString() for a string representation of the character.
Inventory Management:
addToInventory(Item* item) to add items to the inventory.
displayInventory() to show the inventory contents (both pure virtual).
Display:
display() to output character details (pure virtual).
This interface enforces a consistent API for all character types, promoting code reusability and abstraction in game design.*/

class ICharacter {
public:
    virtual ~ICharacter() = default;

    virtual bool isAlive() const = 0;
    virtual bool takeDamage(unsigned damage) = 0;
    virtual bool attack(ICharacter& target) = 0;
    
    virtual std::string getName() const = 0;
    virtual std::string getDescription() const = 0;
    virtual unsigned getmaxHealth()const = 0;
    virtual unsigned getHealth() const = 0;
    virtual unsigned getAttack() const = 0;
    virtual unsigned getDefense() const = 0;
    virtual std::string toString() const = 0;

    virtual void addToInventory(Item* item) = 0;
    virtual void displayInventory() const = 0;
    

    virtual void display() const = 0;
};

#endif